package com.zhaojk.audio.domain;

import com.fasterxml.jackson.annotation.JsonValue;

/**
 * 训练类型枚举，表示不同的学习训练模式
 */
public enum TrainingType {
    /**
     * 播放音频展示图片
     * 建立音频和图片的关联关系
     */
    AUDIO_BASE("AudioBase", "com.zhaojk.audio.domain.AudioBasePage", "播放音频展示图片", 1),

    /**
     * 看图片选择匹配的音频
     * 用户需要从多个音频选项中选择与图片匹配的选项
     */
    IMAGE_CHOOSE_AUDIO("ImageChooseAudio", "com.zhaojk.audio.domain.ImageChooseAudioPage", "通过图片选择匹配的音频", 2),

    /**
     * 听音频选择匹配的图片
     * 用户需要从多个图片选项中选择与音频匹配的选项
     */
    AUDIO_CHOOSE_IMAGE("AudioChooseImage", "com.zhaojk.audio.domain.AudioChooseImagePage", "根据音频选择匹配的图片", 2);

    // 训练类型
    private final String value;
    private final String pageClassName;
    // 描述信息
    private final String description;
    // 优先级
    private int order;

    TrainingType(String value, String pageClassName, String description, int order) {
        this.value = value;
        this.pageClassName = pageClassName;
        this.description = description;
        this.order = order;
    }

    @JsonValue
    public String getValue() {
        return value;
    }

    public String getPageClassName() {
        return pageClassName;
    }

    /**
     * 获取描述信息
     * @return 训练类型的详细描述
     */
    public String getDescription() {
        return description;
    }

    public int getOrder() {
        return order;
    }

    /**
     * 根据名称查找枚举值
     * @param name 枚举名称
     * @return 对应的枚举值，如果不存在则返回null
     */
    public static TrainingType fromName(String name) {
        for (TrainingType type : values()) {
            if (type.name().equalsIgnoreCase(name)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 根据显示名称查找枚举值
     * @param value 显示名称
     * @return 对应的枚举值，如果不存在则返回null
     */
    public static TrainingType fromValue(String value) {
        for (TrainingType type : values()) {
            if (type.value.equalsIgnoreCase(value)) {
                return type;
            }
        }
        return null;
    }
}
